{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Basic SHAP Interaction Value Example in XGBoost\n", "\n", "This notebook shows how the SHAP interaction values for a very simple function are computed. We start with a simple linear function, and then add an interaction term to see how it changes the SHAP values and the SHAP interaction values." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import xgboost\n", "from sklearn.linear_model import LinearRegression\n", "\n", "import shap" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Explain a linear function with no interactions\n", "\n", "Simulate some binary data and a linear outcome with an interaction term.\n", "\n", "Note we make the features in `X` perfectly independent of each other to make it easy to solve for the exact SHAP values." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "N = 2_000\n", "X = np.zeros((N, 5))\n", "\n", "X[:1_000, 0] = 1\n", "\n", "X[:500, 1] = 1\n", "X[1_000:1_500, 1] = 1\n", "\n", "X[:250, 2] = 1\n", "X[500:750, 2] = 1\n", "X[1_000:1_250, 2] = 1\n", "X[1_500:1_750, 2] = 1\n", "\n", "# mean-center the data\n", "X[:, 0:3] -= 0.5\n", "\n", "y = 2 * X[:, 0] - 3 * X[:, 1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that the variables are indeed independent" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.25012506, 0. , 0. , 0. , 0. ],\n", " [0. , 0.25012506, 0. , 0. , 0. ],\n", " [0. , 0. , 0.25012506, 0. , 0. ],\n", " [0. , 0. , 0. , 0. , 0. ],\n", " [0. , 0. , 0. , 0. , 0. ]])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.cov(X.T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and mean-centered." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0., 0., 0., 0., 0.])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X.mean(axis=0)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model error = 0.0\n", "0:[f1<0] yes=1,no=2,missing=1,gain=4500,cover=2000\n", "\t1:[f0<0] yes=3,no=4,missing=3,gain=1000,cover=1000\n", "\t\t3:leaf=0.5,cover=500\n", "\t\t4:leaf=2.5,cover=500\n", "\t2:[f0<0] yes=5,no=6,missing=5,gain=1000,cover=1000\n", "\t\t5:leaf=-2.5,cover=500\n", "\t\t6:leaf=-0.5,cover=500\n", "\n" ] } ], "source": [ "# train a model with single tree\n", "Xd = xgboost.DMatrix(X, label=y)\n", "model = xgboost.train({\"eta\": 1, \"max_depth\": 3, \"base_score\": 0, \"lambda\": 0}, Xd, 1)\n", "\n", "print(\"Model error =\", np.linalg.norm(y - model.predict(Xd)))\n", "print(model.get_dump(with_stats=True)[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SHAP values" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pred = model.predict(Xd, output_margin=True)\n", "\n", "explainer = shap.TreeExplainer(model)\n", "explanation = explainer(Xd)\n", "\n", "shap_values = explanation.values\n", "# make sure the SHAP values add up to marginal predictions\n", "np.abs(shap_values.sum(axis=1) + explanation.base_values - pred).max()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we build a [beeswarm][beeswarm_doclink] plot, we see that only features 0 and 1 have any effect on the output, and that their effects only have two possible magnitudes (1/-1 and 1.5/-1.5 correspondingly).\n", "\n", "[beeswarm_doclink]: ../../../generated/shap.plots.beeswarm.rst#shap.plots.beeswarm" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "shap.plots.beeswarm(explanation)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Train a linear model" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 2., -3., -0., 0., 0.])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lr = LinearRegression()\n", "lr.fit(X, y)\n", "lr_pred = lr.predict(X)\n", "lr.coef_.round(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make sure the computed SHAP values match the true SHAP values\n", "(we can compute the true SHAP values directly for any linear regression)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.6542433490447965e-13" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "main_effect_shap_values = lr.coef_ * (X - X.mean(0))\n", "np.linalg.norm(shap_values - main_effect_shap_values)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SHAP interaction values\n", "\n", "Note that when there are no interactions present, the SHAP interaction values are just a diagonal matrix with the SHAP values on the diagonal." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1. , 0. , 0. , 0. , 0. ],\n", " [ 0. , -1.5, 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. ]], dtype=float32)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "shap_interaction_values = explainer.shap_interaction_values(Xd)\n", "shap_interaction_values[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's ensure that the SHAP interaction values sum to the marginal predictions:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.abs(shap_interaction_values.sum((1, 2)) + explainer.expected_value - pred).max()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And ensure the main effects from the SHAP interaction values match those from a linear model:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0533118387982904e-11" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total = 0\n", "for i in range(N):\n", " for j in range(5):\n", " total += np.abs(shap_interaction_values[i, j, j] - main_effect_shap_values[i, j])\n", "total" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Explain a linear model with one interaction\n", "\n", "Simulate some binary data and a linear outcome with an interaction term.\n", "\n", "Note that we make the features in `X` perfectly independent of each other to make it easy to solve for the exact SHAP values." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "N = 2_000\n", "X = np.zeros((N, 5))\n", "X[:1_000, 0] = 1\n", "\n", "X[:500, 1] = 1\n", "X[1_000:1_500, 1] = 1\n", "\n", "X[:250, 2] = 1\n", "X[500:750, 2] = 1\n", "X[1_000:1_250, 2] = 1\n", "X[1_500:1_750, 2] = 1\n", "\n", "X[:125, 3] = 1\n", "X[250:375, 3] = 1\n", "X[500:625, 3] = 1\n", "X[750:875, 3] = 1\n", "X[1_000:1_125, 3] = 1\n", "X[1_250:1_375, 3] = 1\n", "X[1_500:1_625, 3] = 1\n", "X[1_750:1_875, 3] = 1\n", "\n", "# we can't exactly mean center the data or XGBoost has trouble finding the splits\n", "X[:, :4] -= 0.4999\n", "\n", "# interaction of features is implemented as the multiplication of the features. Note that any other function of the\n", "# features would also work, but is harder to interpret (e.g. sin(x1*x2)).\n", "y = 2 * X[:, 0] - 3 * X[:, 1] + 2 * X[:, 1] * X[:, 2]" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1.e-04, 1.e-04, 1.e-04, 1.e-04, 0.e+00])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X.mean(axis=0)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model error = 1.7365037830677591e-06\n", "0:[f1<0.000100001693] yes=1,no=2,missing=1,gain=4499.3999,cover=2000\n", "\t1:[f0<0.000100001693] yes=3,no=4,missing=3,gain=1000.00024,cover=1000\n", "\t\t3:[f2<0.000100001693] yes=7,no=8,missing=7,gain=124.950005,cover=500\n", "\t\t\t7:leaf=0.99970001,cover=250\n", "\t\t\t8:leaf=-9.99800031e-05,cover=250\n", "\t\t4:[f2<0.000100001693] yes=9,no=10,missing=9,gain=124.950195,cover=500\n", "\t\t\t9:leaf=2.99970007,cover=250\n", "\t\t\t10:leaf=1.99989998,cover=250\n", "\t2:[f0<0.000100001693] yes=5,no=6,missing=5,gain=999.999756,cover=1000\n", "\t\t5:[f2<0.000100001693] yes=11,no=12,missing=11,gain=125.050049,cover=500\n", "\t\t\t11:leaf=-3.0000999,cover=250\n", "\t\t\t12:leaf=-1.99989998,cover=250\n", "\t\t6:[f2<0.000100001693] yes=13,no=14,missing=13,gain=125.050018,cover=500\n", "\t\t\t13:leaf=-1.00010002,cover=250\n", "\t\t\t14:leaf=0.000100019999,cover=250\n", "\n" ] } ], "source": [ "# train a model with single tree\n", "Xd = xgboost.DMatrix(X, label=y)\n", "model = xgboost.train({\"eta\": 1, \"max_depth\": 4, \"base_score\": 0, \"lambda\": 0}, Xd, 1)\n", "print(\"Model error =\", np.linalg.norm(y - model.predict(Xd)))\n", "print(model.get_dump(with_stats=True)[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SHAP values" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4.7683716e-07" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pred = model.predict(Xd, output_margin=True)\n", "\n", "explainer = shap.TreeExplainer(model)\n", "explanation = explainer(Xd)\n", "\n", "shap_values = explanation.values\n", "# make sure the SHAP values add up to marginal predictions\n", "np.abs(shap_values.sum(axis=1) + explanation.base_values - pred).max()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we build a [beeswarm][beeswarm_doclink] plot, we see that now only features 3 and 4 don't matter, and that feature 1 can have four possible effect sizes due to interactions.\n", "\n", "[beeswarm_doclink]: ../../../generated/shap.plots.beeswarm.rst#shap.plots.beeswarm" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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ZmYmOjs7i++8846Ynp6uMKRambi4ONHHx0e0trYWLS0txRdeeEH84IMP5Iat27lzp9ihQwfRzMxMBKA09qfduHFDHD58uOjk5CSamJiIHh4e4qeffio3PJ2qY37WeXpa2XB75Ye4K6PquFW9pzZv3ix26dJFtLS0FC0tLcUuXbqIW7ZsUVrv0qVLxebNm4umpqZi06ZNxfnz58uGZXw6ltzcXHHWrFlimzZtRHNzc9Ha2lps0aKFOHbsWPH48eOy9So7vKG651kURfH48eOij4+PaGZmJtavX1985513xEePHik9RydOnBB9fHxES0tLEYBsyLzyw+TFxcWJXl5eoqmpqejq6ipOmzZNLCwsVKi3Mp/Tit5rf/zxhwhA/PXXX9U6N0T6RhBFDe+wISLSU3369EFubi4OHTpUI/X16NEDKSkpSElJqZH6iCqSkpICDw8PfPnllwpPN61uQUFBuHXrFk6dOlVrbrol0ib2sSaiOmfevHk4duyYRmMPE5Fm/vzzT2zbtg3z5s1jUk0Gi32siajOad26dbUPUUZE8jp06KAwXCSRoWGLNRERERGRFrCPNRERERGRFrDFmoiIiIhIC5hYExERERFpARNrIiIiIiItYGJNRERERKQFTKyJiIiIiLSAiTURERERkRYwsSYiIiIi0gIm1kREREREWvB/3+bnpubP11IAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "shap.plots.beeswarm(explanation)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Train a linear model" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 2., -3., 0., -0., 0.])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lr = LinearRegression()\n", "lr.fit(X, y)\n", "lr_pred = lr.predict(X)\n", "lr.coef_.round(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the SHAP values no longer match the main effects because they now include interaction effects." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "15.811387829626835" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "main_effect_shap_values = lr.coef_ * (X - X.mean(0))\n", "np.linalg.norm(shap_values - main_effect_shap_values)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SHAP interaction values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "SHAP interaction contributions are displayed on the off-diagonal" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1. , 0. , 0. , 0. , 0. ],\n", " [ 0. , -1.5 , 0.25, 0. , 0. ],\n", " [ 0. , 0.25, 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. ]], dtype=float32)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "shap_interaction_values = explainer.shap_interaction_values(Xd)\n", "shap_interaction_values[0].round(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ensure the SHAP interaction values sum to the marginal predictions" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4.7683716e-07" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.abs(shap_interaction_values.sum((1, 2)) + explainer.expected_value - pred).max()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "While the main effects no longer match the SHAP values when interactions are present, they do match the main effects (from the linear model) on the diagonal of the SHAP interaction value matrix." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0005347490392160024" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total = 0\n", "for i in range(N):\n", " for j in range(5):\n", " total += np.abs(shap_interaction_values[i, j, j] - main_effect_shap_values[i, j])\n", "total" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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UmsItVpd6rnSkskWLVpodhUoSXl1uE5OTsjIyCjxXNGesUREpopJLBHVSk2bNsXp06fh4uJSal1okaSkJDx58gTLly+Hl5eX1rmcnBydn+QlEkmpczk4OCAnJ0en/f79+xWI/p/4s7Ky0KlTp1KT8PK0bdsW8fHxePjwodaK7cOHD5GRkYEePXoYNC8RUU3ALbaIqFYqeujq66+/LnEV9PlSgqIkURAErT579+7V6lfExsYGcrm8xO91c3PD5cuXtepN5XI5Dhw4UKH4g4KC8OjRI+zYsaPE8yXFVVyfPn0A/PNyhucVHffr169CMRER1SRciSWiWqlt27Z49913sWHDBowePRr+/v5wdnZGZmYmrl+/jlOnTuHMmTMAgG7dumH16tVYsGABhg8fDqlUit9//x2nT5+Gq6urThLcrl077N+/H2vXroWHhwckEgl69OgBGxsbDB8+HPPnz0d4eDgCAwORm5uLffv2oVGjRnolnkVGjRqFs2fPYtWqVTh//jw6deoEW1tbPHz4EOfPn4elpaXOzgzFde/eHW+88QZ27NgBhUKBdu3a4fLly9i/fz/69euHjh07Vvi+EhHVFExiiajWevfdd9GmTRv85z//wffff4+nT5+ifv36aN68OT766CNNP1dXV/z73//G119/jZiYGJiZmaFDhw5Yv349li1bhrS0NK15IyIikJOTg7i4OOTm5kIQBBw4cAA2Njbo168fMjIy8MMPP2DFihVo0qQJJk6cCDMzswrtcmBubo6VK1di165dOHTokCZhdXZ2Rtu2bdG/f3+95lm6dCm+/fZbxMfH49ChQ2jQoAHCw8Mxfvx4vWMhIqqJJELx38+IiIiIiGo41sQSERERkclhEktEREREJodJLBERERGZHCaxRERERGRymMQSERERkclhEktEREREJodJLBERERGZHCaxRERERGRymMQSERERkclhEktEREREJodJLBERERGZHCaxRERERGRymMQSERERkcn5f8UnIabwLi/6AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "shap.dependence_plot(0, shap_values, X)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we build a dependence plot for feature 0, we see that it only takes two values and that these values are entirely dependent on the value of the feature. Hence, they lie on a straight line (the value of feature 0 entirely determines its effect because it has no interactions with other features)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In contrast, if we build a dependence plot for feature 2, we see that it takes 4 possible values and they are not entirely determined by the value of feature 2.\n", "Instead they also depend on the value of feature 3.\n", "This vertical spread in a dependence plot represents the effects of non-linear interactions." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "invalid value encountered in divide\n", "invalid value encountered in divide\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "shap.dependence_plot(2, shap_values, X)" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 1 }